package com.ruoci.redis.controller;

import com.ruoci.redis.utils.RedisUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Set;

/**
 * @Author yang
 * 数据结构类似于Set结构,只是ZSet结构中，在set基础上加入了一个score字段,通过利用score进行相关的排序。
 * 每个元素都会有一个分值（score）,然后所有元素按照分值的大小进行排列，相当于是一个进行了排序的链表。
 **/
@RestController
public class SortedSetController {

    @Resource
    RedisUtil redisUtil;


    @GetMapping("/zSet")
    public void sortedSet(){
        redisUtil.sortedSet("person","0001",60);
        redisUtil.sortedSet("person","0002",70);
        redisUtil.sortedSet("person","0003",80);
    }


    @GetMapping("/countZSet")
    public Long countSortedSet(){
        return redisUtil.countSortedSet("person");
    }


    @GetMapping("/rangeZSet")
    public Set<Object> rangeSortedSet(){
        return redisUtil.rangeSortedSet("person", 0L, 2L);
    }


    @GetMapping("/removeZSet")
    public Long removeSortedSet(){
        return redisUtil.removeSortedSet("person","0001");
    }

    @GetMapping("/score")
    public Double score(){
        return redisUtil.score("person","0002");
    }


    @GetMapping("/rangeByScore")
    public Set<Object> rangeByScore(){
        return redisUtil.rangeByScore("person",30,90);
    }


    @GetMapping("/addScore")
    public Object addScore(){
        return redisUtil.addScore("person","0003",90);
    }


    @GetMapping("/sortedSetRank")
    public Object sortedSetRank(){
        return redisUtil.sortedSetRank("person","0003");
    }

}
